package com.noob.leetcode;

import java.util.regex.Pattern;

/**
 * 给定一个字符串，验证它是否是回文串，只考虑字母和数字字符，可以忽略字母的大小写。
 *
 * 说明：本题中，我们将空字符串定义为有效的回文串。
 *
 * 示例 1:
 *
 * 输入: "A man, a plan, a canal: Panama"
 * 输出: true
 * 示例 2:
 *
 * 输入: "race a car"
 * 输出: false
 */
public class PalindromeMain {


    public boolean isPalindrome(String str){
        //处理字符串，只保留字母和数字
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i < str.length(); i++) {
            char word = str.charAt(i);
            boolean isMatch = Pattern.compile("[A-Za-z0-9]+").matcher(word + "").matches();
            if (isMatch){
                sb.append(word);
            }
        }
        String postProcessStr=sb.toString();
        System.out.println(postProcessStr);
        //判断回文
        return isPalinDromeString(postProcessStr);
    }

    public static void main(String[] args) {
        System.out.println(new PalindromeMain().isPalindrome("`l;`` 1o1 ??;l`"));
    }

    public boolean isPalinDromeString(String str){
        if ("".equals(str)||str.length()==1){
            return true;
        }else {
            boolean match = (str.charAt(0)+"" ).equalsIgnoreCase(str.charAt(str.length() - 1)+"");
            if (match) {
                if (str.length()>2){
                    return isPalinDromeString(str.substring(1, str.length() - 1));
                }else {
                    return true;
                }
            }else {
                return false;
            }
        }
    }
}
